package internal

import (
	"context"
	"github.com/gogf/gf/v2/database/gdb"
	"github.com/gogf/gf/v2/frame/g"
)

type PermissionDao struct {
	table     string            // 表名称
	group     string            // 数据源分组，默认default
	columns   PermissionColumns // 表字段
	columnMap map[string]string //表字段map
}

// PermissionColumns defines and stores column names for table gen_database.
type PermissionColumns struct {
	Id            string //
	TenantCode    string //租户编码
	Code          string //权限的标识
	Path          string //权限对应的api路径
	Method        string //请求的http方法
	Tag           string //所属标签
	Description   string //方法描述
	Creator       string //创建人
	CreatorId     string //创建人id
	CreateDate    string //创建时间
	Modifier      string //修改者
	ModifierId    string //修改者id
	ModifyDate    string //修改时间
	State         string //状态（1正常 0停用）
	VersionNumber string //版本号
}

//  permissionColumns holds the columns for table mes_gf_mst_yield_line.
var permissionColumns = PermissionColumns{
	Id:            "id",             //
	TenantCode:    "tenant_code",    //租户编码
	Code:          "code",           //权限的标识
	Path:          "path",           //权限对应的api路径
	Method:        "method",         //请求的http方法
	Tag:           "tag",            //所属标签
	Description:   "description",    //方法描述
	Creator:       "creator",        //创建人
	CreatorId:     "creator_id",     //创建人id
	CreateDate:    "create_date",    //创建时间
	Modifier:      "modifier",       //修改者
	ModifierId:    "modifier_id",    //修改者id
	ModifyDate:    "modify_date",    //修改时间
	State:         "state",          //状态（1正常 0停用）
	VersionNumber: "version_number", //版本号
}
var permissionColumnMap = map[string]string{
	"Id":            "id",             //
	"TenantCode":    "tenant_code",    //租户编码
	"Code":          "code",           //权限的标识
	"Path":          "path",           //权限对应的api路径
	"Method":        "method",         //请求的http方法
	"Tag":           "tag",            //所属标签
	"Description":   "description",    //方法描述
	"Creator":       "creator",        //创建人
	"CreatorId":     "creator_id",     //创建人id
	"CreateDate":    "create_date",    //创建时间
	"Modifier":      "modifier",       //修改者
	"ModifierId":    "modifier_id",    //修改者id
	"ModifyDate":    "modify_date",    //修改时间
	"State":         "state",          //状态（1正常 0停用）
	"VersionNumber": "version_number", //版本号
}

// NewPermissionDao creates and returns a new DAO object for table data access.
func NewPermissionDao() *PermissionDao {
	return &PermissionDao{
		group:     "default",
		table:     "sys_permission",
		columns:   permissionColumns,
		columnMap: permissionColumnMap,
	}
}

// DB retrieves and returns the underlying raw database management object of current DAO.
func (dao *PermissionDao) DB() gdb.DB {
	return g.DB(dao.group)
}

// Table returns the table name of current dao.
func (dao *PermissionDao) Table() string {
	return dao.table
}

// Columns returns all column names of current dao.
func (dao *PermissionDao) Columns() PermissionColumns {
	return dao.columns
}

// ColumnMap returns all column map of current dao.
func (dao *PermissionDao) ColumnMap() map[string]string {
	return dao.columnMap
}

// Group returns the configuration group name of database of current dao.
func (dao *PermissionDao) Group() string {
	return dao.group
}

// Ctx creates and returns the Model for current DAO, It automatically sets the context for current operation.
func (dao *PermissionDao) Ctx(ctx context.Context) *gdb.Model {
	return dao.DB().Model(dao.table).Safe().Ctx(ctx)
}

// Transaction 事务函数
func (dao *PermissionDao) Transaction(ctx context.Context, f func(ctx context.Context, tx *gdb.TX) error) (err error) {
	return dao.Ctx(ctx).Transaction(ctx, f)
}
